package body Plaques_Finales is
	function Get_Id (P : Plaque_Finale) return Natural is
	begin
		return P.Id;
	end Get_Id;
	
	function Get_Taille (P : Plaque_Finale) return Dimension is
	begin
		return P.Taille;
	end Get_Taille;
	
	function Get_Contenu (P : Plaque_Finale) return T_Liste is
	begin
		return P.Contenu;
	end Get_Contenu;

	procedure Set_Contenu (P : in out Plaque_Finale; C : in T_Liste) is
	begin
		P.Contenu := C;
	end Set_Contenu;
	
	function Get_Verre (P : Plaque_Finale) return Categorie_Verre is
	begin
		return P.Verre;
	end Get_Verre;

    function Get_Surface_Utilisee (P : Plaque_Finale) return Natural is
	begin
		return P.Surface_Utilisee;
	end Get_Surface_Utilisee;
	
	function Get_Surface_Chutes (P : Plaque_Finale) return Natural is
	begin
	    if Taux_Remplissage(P) = 0.0 then
	       return 0;
	    else
	       return Surface(P.Taille) - P.Surface_Utilisee;
        end if;
    end Get_Surface_Chutes;
	
	function Taux_Remplissage (P : Plaque_Finale) return Float is
	begin
	    return Float(P.Surface_Utilisee) / Float(Surface(P.Taille)) * 100.0;
    end Taux_Remplissage;
	
	function Creer (Id : Natural; Taille : Dimension; Verre : Categorie_Verre) return Plaque_Finale is
	begin
		return Plaque_Finale'(Id, Taille, Verre, Contenu => Cree_SListe, Surface_Utilisee => 0);
	end Creer;
	
	procedure Ajouter_Contenu (P : in out Plaque_Finale; Pi : in Piece) is
	begin
		Ajout_Fin(P.Contenu, Pi);
	end Ajouter_Contenu;

    procedure Supprimer_Contenu (P : in out Plaque_Finale; Pi : in Piece) is
    begin
        Supprime_1(P.Contenu, Pi);
    end Supprimer_Contenu;

    procedure Ajouter_Surface (P : in out Plaque_Finale; Surface : in Natural) is
    begin
        P.Surface_Utilisee := P.Surface_Utilisee + Surface;
    end Ajouter_Surface;

	function Egal_Id (P : Plaque_Finale) return Boolean is
	begin
		return Get_Id(P) = Id_Plaque;
	end Egal_Id;
end Plaques_Finales;